package com.atguigu.gmall.product.service.impl;

import com.atguigu.gmall.model.product.SkuAttrValue;
import com.atguigu.gmall.model.product.SkuImage;
import com.atguigu.gmall.model.product.SkuInfo;
import com.atguigu.gmall.model.product.SkuSaleAttrValue;
import com.atguigu.gmall.product.mapper.SkuInfoMapper;
import com.atguigu.gmall.product.service.SkuAttrValueService;
import com.atguigu.gmall.product.service.SkuImageService;
import com.atguigu.gmall.product.service.SkuInfoService;
import com.atguigu.gmall.product.service.SkuSaleAttrValueService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.List;

/**
* @author lfy
* @description 针对表【sku_info(库存单元表)】的数据库操作Service实现
* @createDate 2022-03-05 11:23:36
*/
@Slf4j
@Service
public class SkuInfoServiceImpl extends ServiceImpl<SkuInfoMapper, SkuInfo>
    implements SkuInfoService{

    @Resource
    SkuInfoMapper skuInfoMapper;

    @Autowired
    SkuImageService skuImageService;

    @Autowired
    SkuAttrValueService skuAttrValueService;

    @Autowired
    SkuSaleAttrValueService skuSaleAttrValueService;

    @Transactional
    @Override
    public void saveSkuInfo(SkuInfo skuInfo) {
        //1、给 sku_info 保存数据
        skuInfoMapper.insert(skuInfo);

        Long id = skuInfo.getId();
        Long spuId = skuInfo.getSpuId();

        //2、给 sku_image 保存数据
        List<SkuImage> imageList = skuInfo.getSkuImageList();
        if(imageList !=null && imageList.size() > 0){
            for (SkuImage skuImage : imageList) {
                skuImage.setSkuId(id); //回填skuId
            }
        }
        skuImageService.saveBatch(imageList);

        //3、给  sku_attr_value 保存数据；保存当前sku对应的真正平台属性名和值
        List<SkuAttrValue> skuAttrValueList = skuInfo.getSkuAttrValueList();
        if(skuAttrValueList!=null && skuAttrValueList.size() > 0){
            for (SkuAttrValue attrValue : skuAttrValueList) {
                attrValue.setSkuId(id);//回填skuId
            }
        }
        skuAttrValueService.saveBatch(skuAttrValueList);

        //4、给 sku_sale_attr_value 保存数据。保存当前sku对应的销售属性名和值
        List<SkuSaleAttrValue> saleAttrValueList = skuInfo.getSkuSaleAttrValueList();
        if(saleAttrValueList!=null && saleAttrValueList.size()>0){
            for (SkuSaleAttrValue saleAttrValue : saleAttrValueList) {
                saleAttrValue.setSkuId(id); //回填skuId
                saleAttrValue.setSpuId(spuId); //回填spuId
            }
        }
        skuSaleAttrValueService.saveBatch(saleAttrValueList);
        log.info("id：【{}】sku信息保存完成：",id);

    }

    @Override
    public void updateSkuSaleStatus(Long skuId, int status) {
        //1、改数据库
        skuInfoMapper.updateSaleStatus(skuId,status);

        //TODO 操作ElasticSearch 进行数据增加删除。嘿嘿,gaga,heiheihehe

    }

    @Override
    public BigDecimal getSkuPrice(Long skuId) {
        return skuInfoMapper.getSkuPrice(skuId);
    }
}




